package com.zahb.qadx.net;

import com.zahb.qadx.model.ArchivesBean;
import com.zahb.qadx.model.AssessmentBean;
import com.zahb.qadx.model.AttentionModel;
import com.zahb.qadx.model.CartInfoBean;
import com.zahb.qadx.model.CateNavigationModel;
import com.zahb.qadx.model.Category;
import com.zahb.qadx.model.CertificateBean;
import com.zahb.qadx.model.CertificateListBean;
import com.zahb.qadx.model.ChoiceExam;
import com.zahb.qadx.model.CommentBean;
import com.zahb.qadx.model.CommonData;
import com.zahb.qadx.model.CommonResponse;
import com.zahb.qadx.model.CompleteModel;
import com.zahb.qadx.model.Curriculum;
import com.zahb.qadx.model.DailyExaminationQuestionsBean;
import com.zahb.qadx.model.DataLogin;
import com.zahb.qadx.model.ExamCategory;
import com.zahb.qadx.model.ExamInfoBean;
import com.zahb.qadx.model.ExamQuestionsBean;
import com.zahb.qadx.model.ExaminationListBean;
import com.zahb.qadx.model.ExercisesDaily;
import com.zahb.qadx.model.ExercisesSpecial;
import com.zahb.qadx.model.ExercisesWeekly;
import com.zahb.qadx.model.HistoricalPerformanceBean;
import com.zahb.qadx.model.JsonRootMicroVideoBean;
import com.zahb.qadx.model.LearnRecord;
import com.zahb.qadx.model.LecturerModel;
import com.zahb.qadx.model.MainFunc1;
import com.zahb.qadx.model.MaterialInfo;
import com.zahb.qadx.model.MicroVideoData;
import com.zahb.qadx.model.NoteBean;
import com.zahb.qadx.model.OfflinePlanBean;
import com.zahb.qadx.model.PressSingleBean;
import com.zahb.qadx.model.QuestionBank;
import com.zahb.qadx.model.QuestionInfo;
import com.zahb.qadx.model.QuestionWrapper;
import com.zahb.qadx.model.RecommendModel;
import com.zahb.qadx.model.RecommendedNewsBean;
import com.zahb.qadx.model.ResultsBean;
import com.zahb.qadx.model.SpecialBean;
import com.zahb.qadx.model.SpecialSingleTopicBean;
import com.zahb.qadx.model.StudyDataBean;
import com.zahb.qadx.model.StudyRecordBean;
import com.zahb.qadx.model.SwitchTheNative;
import com.zahb.qadx.model.TaskListBean;
import com.zahb.qadx.model.TeacherInfoBean;
import com.zahb.qadx.model.TeacherModel;
import com.zahb.qadx.model.TestInformationBean;
import com.zahb.qadx.model.TestQuestions;
import com.zahb.qadx.model.TrainAllBean;
import com.zahb.qadx.model.TrainDataBean;
import com.zahb.qadx.model.TrainDetailsBean;
import com.zahb.qadx.model.TrainInfoBean;
import com.zahb.qadx.model.Upgrade;
import com.zahb.qadx.model.UserInfoModel;
import com.zahb.qadx.model.VideoListBean;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import io.reactivex.Observable;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Headers;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.Query;
import retrofit2.http.QueryMap;

/**
 * Created by Zdw on 2020/09/29 14:33
 */
public interface ApiService {

    //获取考试列表
    @GET(RetrofitService.BASE_URL_DIR + "user/exam/list")
    Observable<CommonResponse<CommonData<ExaminationListBean>>> getExaminationList(@Query("page") int page,
                                                                                   @Query("pageSize") int pageSize,
                                                                                   @Query("type") int type);

    // 记录学时
    @POST(RetrofitStudyTimeService.BASE_URL_DIR + "api/v1/behavior/collection")
    Observable<CommonResponse<Object>> saveStudyTime(@Body RequestBody requestBody);

    // 获取学习记录
    @FormUrlEncoded
    @POST(RetrofitStudyTimeService.BASE_URL_DIR + "learn/course/getlearnRecord")
    Observable<CommonResponse<LearnRecord>> getLearnRecord(@Field("outlineId") String outlineId,
                                                           @Field("relationshipId") String relationshipId,
                                                           @Field("userCourseId") String userCourseId);

    // 账户密码登录
    @FormUrlEncoded
    @POST(RetrofitService.BASE_URL_DIR + "user/security/wxlogin")
    Observable<CommonResponse<DataLogin>> loginTypeAccount(@Field("loginId") String loginId,
                                                           @Field("password") String password);

    // 手机验证登录
    @FormUrlEncoded
    @POST(RetrofitService.BASE_URL_DIR + "user/security/wxlogin")
    Observable<CommonResponse<DataLogin>> loginTypeSmsCode(@Field("phone") String phone,
                                                           @Field("checkCode") String checkCode);

    // 发送验证码
    @POST(RetrofitService.BASE_URL_DIR + "user/message/sms/send")
    Observable<CommonResponse<Object>> sendSmsCode(@Body RequestBody requestBody);

    // 判断验证码是否正确
    @FormUrlEncoded
    @POST(RetrofitService.BASE_URL_DIR + "user/security/verifyCode")
    Observable<CommonResponse<Object>> verifySmsCode(@Field("phone") String phone,
                                                     @Field("checkCode") String checkCode,
                                                     @Field("isRegist") int isRegist);

    // 重置密码
    @FormUrlEncoded
    @POST(RetrofitService.BASE_URL_DIR + "user/security/resetPwd")
    Observable<CommonResponse<Object>> resetPwd(@Field("cellPhone") String phone,
                                                @Field("newPwd") String newPwd);

    // 首页数据获取
    @FormUrlEncoded
    @POST(RetrofitService.BASE_URL_DIR + "user/index/funcList")
    Observable<CommonResponse<ArrayList<MainFunc1>>> getFuncList(@Field("appType") int appType,
                                                                 @Field("mode") String mode
                                                                               );

    // 获取视频列表
    @GET(RetrofitService.BASE_URL_DIR + "resource/source/good/videos")
    Observable<CommonResponse<ArrayList<VideoListBean>>> getGreatVideos();

    // 获取视频资源Id
    @FormUrlEncoded
    @POST(RetrofitService.BASE_URL_DIR + "resource/material/info")
    Observable<CommonResponse<MaterialInfo>> postMaterialInfo(@Field("materialId") String materialId);

    // 获取音频列表
    @GET(RetrofitService.BASE_URL_DIR + "resource/source/good/radios")
    Observable<CommonResponse<ArrayList<VideoListBean>>> getGreatAudios();

    // 获取课程分类列表
    @POST(RetrofitService.BASE_URL_DIR + "resource/category/getList")
    Observable<CommonResponse<CommonData<Category>>> getCurriculumCategoryList(@Body RequestBody requestBody);

    // 获取课程列表
    @POST(RetrofitService.BASE_URL_DIR + "user/course/hf/getCourseList")
    Observable<CommonResponse<CommonData<Curriculum>>> getCurriculumList(@Body RequestBody requestBody);

    // 获取课程信息
    @GET(RetrofitService.BASE_URL_DIR + "user/course/hf/getCourseInfo")
    Observable<CommonResponse<Curriculum>> getCurriculumDetails(@Query("courseId") String courseId,
                                                                @Query("snapshotId") String snapshotId,
                                                                @Query("courseUserId") String courseUserId,
                                                                @Query("listType") int listType);

    // 获取H5资源信息
    @GET(RetrofitService.BASE_URL_DIR + "user/course/hf/getMaterialInfo")
    Observable<CommonResponse<MaterialInfo>> getMaterialInfo(@Query("materialId") String materialId);

    // 获取课程详情讲师信息
    @POST(RetrofitService.BASE_URL_DIR + "resource/teacher/getList")
    Observable<CommonResponse<CommonData<TeacherModel.TeacherData>>> getCurriculumTeacherData(@Body RequestBody requestBody);

    // 获取课程练习信息
    @GET(RetrofitService.BASE_URL_DIR + "ques/practice/getPracticeInfo")
    Observable<CommonResponse<QuestionWrapper>> getPracticeInfo(@Query("practiceId") int practiceId);


    //获取用户信息
    @POST(RetrofitService.BASE_URL_DIR + "user/security/info")
    Observable<UserInfoModel> getUserInfo();

    //企业切换接口
    @FormUrlEncoded
    @POST(RetrofitService.BASE_URL_DIR + "user/security/changeorg")
    Observable<CommonResponse<Object>> ChangOrg(@Field("orgUserId") int orgUserId);


    //退出登录
    @POST(RetrofitService.BASE_URL_DIR + "user/security/loginOut")
    Observable<CommonResponse<Object>> getLoginOut();


    //修改密码
    @FormUrlEncoded
    @POST(RetrofitService.BASE_URL_DIR + "user/security/updatePwd")
    Observable<CommonResponse<Object>> getUpdatePwd(@Field("oldpwd") String oldpwd,
                                                    @Field("pwd") String pwd);


    //获取关注列表
    @POST(RetrofitService.BASE_URL_DIR + "user/user/attention/getUserAttention")
    Observable<CommonResponse<AttentionModel.AttentionData>> getUserAttention(@Body RequestBody requestBody);


    //关注或取消
    @POST(RetrofitService.BASE_URL_DIR + "user/user/attention/saveOrCancel")
    Observable<CommonResponse<Object>> getSaveorCancel(@Body RequestBody requestBody);


    //教师详情于编辑
    @FormUrlEncoded
    @POST(RetrofitService.BASE_URL_DIR + "resource/teacher/edit")
    Observable<TeacherModel> getTeacher(@Field("teacherId") String teacherId,
                                        @Field("requestType") int requestType);

    //讲师详情相关课程
    @POST(RetrofitService.BASE_URL_DIR + "user/course/getCourseInfoByTeacher")
    Observable<CommonResponse<RecommendModel.RecomendData>> getCourseInfoByTeacher(@Body RequestBody requestBody);

    //用户课程信息
    @GET(RetrofitService.BASE_URL_DIR + "user/course/hf/getUserDistributeCourse")
    Observable<CompleteModel> getUserCourse(@Query("pageSize") int pageSize,
                                            @Query("startPage") int startPage);

    //用户任务信息
    @GET(RetrofitService.BASE_URL_DIR + "user/task/list")
    Observable<CommonResponse<CommonData<TaskListBean>>> getTaskList(@Query("page") int page,
                                                                     @Query("pageSize") int pageSize,
                                                                     @Query("type") int type);

    //新闻分类列表
    @POST(RetrofitService.BASE_URL_DIR + "news/news/cate/list")
    Observable<CommonResponse<List<CateNavigationModel.NavigationData>>> getListData();

    //讲师列表
    @POST(RetrofitService.BASE_URL_DIR + "resource/teacher/getList")
    Observable<CommonResponse<LecturerModel.LecturerData>> getTeacherList(@Body RequestBody requestBody);

    //新闻列表
    @POST(RetrofitService.BASE_URL_DIR + "news/news/list")
    Observable<CommonResponse<CommonData<CateNavigationModel.NewsDataItem>>> getNewsListData(@Body RequestBody requestBody);

    //更换手机号
    @FormUrlEncoded
    @POST(RetrofitService.BASE_URL_DIR + "user/security/upsetPhone")
    Observable<CommonResponse<Object>> updatePhone(@Field("checkCode") String checkCode,
                                                   @Field("newPhone") String newPhone,
                                                   @Field("oldPhone") String oldPhone);

    // 获取app权限
    @GET(RetrofitService.BASE_URL_DIR + "user/role/manage/getAppAuthorityMenu")
    Observable<Object> getAppAuthorityMenu();

    // 获取考试分类列表
    @POST(RetrofitService.BASE_URL_DIR + "resource/category/getList")
    Observable<CommonResponse<CommonData<ExamCategory>>> getExamCategoryList(@Body RequestBody requestBody);

    // 获取抽考列表
    @FormUrlEncoded
    @POST(RetrofitService.BASE_URL_DIR + "ques/exam/list")
    Observable<CommonResponse<CommonData<ChoiceExam>>> getChoiceExamList(@Field("pageNo") int pageNo,
                                                                         @Field("pageSize") int pageSize,
                                                                         @Field("listType") int listType);

    // 获取试卷题库列表
    @POST(RetrofitService.BASE_URL_DIR + "ques/quesLib/getExamPaperQuestionLibList")
    Observable<CommonResponse<CommonData<QuestionBank>>> getExamPaperQuestionLibList(@Body RequestBody requestBody);

    // 获取问题信息列表
    @GET(RetrofitService.BASE_URL_DIR + "ques/quesLib/getQuestionInfoList")
    Observable<CommonResponse<QuestionInfo>> getQuestionInfoList(@Query("questionLibId") int questionLibId,
                                                                 @Query("difficultyInfo") String difficultyInfo);

    // 操作试卷
    @POST(RetrofitService.BASE_URL_DIR + "ques/examPaper/opreationExamination")
    Observable<CommonResponse<Integer>> opreationExamination(@Body RequestBody requestBody);

    // 操作试卷
    @POST(RetrofitService.BASE_URL_DIR + "ques/exam/save")
    Observable<CommonResponse<Integer>> saveAndPublishChoiceExam(@Body RequestBody requestBody);

    // 获取考试信息
    @FormUrlEncoded
    @POST(RetrofitService.BASE_URL_DIR + "ques/exam/info")
    Observable<CommonResponse<Object>> getExamInfo(@Field("examId") int examId);

    // 获取试卷信息
    @GET(RetrofitService.BASE_URL_DIR + "ques/examPaper/getExaminationInfo")
    Observable<CommonResponse<Object>> getExamPaperInfo(@Query("examinationId") int examinationId);

    // 学习统计人数统计
    @GET(RetrofitService.BASE_URL_DIR + "user/exam/examinationStatistics")
    Observable<CommonResponse<Object>> examinationStatistics(@Query("examinationId") int examinationId);

    // 学习统计成绩列表
    @POST(RetrofitService.BASE_URL_DIR + "user/exam/examinationList")
    Observable<CommonResponse<CommonData<Object>>> examinationList(@Body RequestBody requestBody);

    // 获取组织树列表
    @POST(RetrofitService.BASE_URL_DIR + "user/user/org/getOrganizeList")
    Observable<CommonResponse<ArrayList<Object>>> getOrganizeList(@Body RequestBody requestBody);

    // 我的培训列表
    @POST(RetrofitService.BASE_URL_DIR + "train/classUserTask/getUserTrainPage")
    Observable<CommonResponse<TrainDataBean>>getUserTrainList(@Body RequestBody requestBody);

    // 我的培训详情头信息
    @FormUrlEncoded
    @POST(RetrofitService.BASE_URL_DIR + "train/tClass/get")
    Observable<CommonResponse<TrainDetailsBean>> getTrainDetailsHead(@Field("classId") int classId,
                                                                     @Field("appKey") String appKey,
                                                                     @Field("orgId") int orgId,
                                                                     @Field("userId") int userId);
    // 培训详情列表
    @GET(RetrofitService.BASE_URL_DIR + "user/class/info")
    Observable<CommonResponse<TrainAllBean>> getTrainDetailsList(
                                                            @Query("classId") int classId);
    // 去学习
    @POST(RetrofitService.BASE_URL_DIR + "user/uc/insert")
    Observable<CommonResponse<String>>toLearn(@Body RequestBody requestBody);

    // 去练习
    @POST(RetrofitService.BASE_URL_DIR + "user/exam/practice/user")
    Observable<CommonResponse<String>>topractice(@Body RequestBody requestBody);

    //去考试
    @POST(RetrofitService.BASE_URL_DIR + "user/exam/user")
    Observable<CommonResponse<String>>toexam(@Body RequestBody requestBody);

    //我的证书列表
    @GET(RetrofitService.BASE_URL_DIR + "user/certificateUser/list")
    Observable<CommonResponse<CertificateListBean>> getCertificateList(@Query("belong") int belong,
                                                                       @Query("pageNum") int pageNum,
                                                                       @Query("pageSize") int pageSize);
    //我的证书详情
    @GET(RetrofitService.BASE_URL_DIR + "user/certificateUser/getUserCertificateInfo")
    Observable<CommonResponse<CertificateBean>> getCertificate(@Query("certificateUserId") int certificateUserId);

    @GET(RetrofitService.BASE_URL_DIR + "user/archives")
    Observable<CommonResponse<ArchivesBean>> archives();


    @Multipart
    @POST(RetrofitService.BASE_URL_DIR + "user/file/upload")
    Observable<CommonResponse<String>> upload(
            @Part() MultipartBody.Part file
    );

    @POST(RetrofitService.BASE_URL_DIR + "user/archives/info")
    Observable<CommonResponse<String>>archives_info(@Body RequestBody requestBody);

    @POST(RetrofitService.BASE_URL_DIR + "user/archives/experience")
    Observable<CommonResponse<String>>archives_experience(@Body RequestBody requestBody);

    @POST(RetrofitService.BASE_URL_DIR + "user/archives/idcard")
    Observable<CommonResponse<String>>archives_idcard(@Body RequestBody requestBody);

    @POST(RetrofitService.BASE_URL_DIR + "user/archives/educatioimg")
    Observable<CommonResponse<String>>educatioimg(@Body RequestBody requestBody);


    @POST(RetrofitService.BASE_URL_DIR + "train/classUser/getUserTrainInfoList")
    Observable<CommonResponse<TrainInfoBean>>getUserTrainInfoList(@Body RequestBody requestBody);

    @GET(RetrofitService.BASE_URL_DIR + "user/uc/getCourseLearnRecordList")
    Observable<CommonResponse<StudyRecordBean>>getCourseLearnRecordList(
            @Query("pageNo") int startPage,
            @Query("pageSize") int pageSize,
            @Query("userId") int userId,
            @Query("courseName") String courseName,
            @Query("startTime") String startTime,
            @Query("endTime") String endTime
    );
    @GET(RetrofitService.BASE_URL_DIR + "user/archives/assessment/record")
    Observable<CommonResponse<AssessmentBean>>assessmentrecord(
            @Query("startPage") int startPage,
            @Query("pageSize") int pageSize
    );
    //获取讲师评论
    @FormUrlEncoded
    @POST(RetrofitService.BASE_URL_DIR + "train/classUserTask/getClassStuEvaluation")
    Observable<CommonResponse<CommentBean>>getClassStuEvaluation(@Field("classId") String classId,
                                                                 @Field("userID") String userID);
    //提交讲师评论
    @POST(RetrofitService.BASE_URL_DIR + "train/classUserTask/saveClassStuEvaluation")
    Observable<CommonResponse<String>> saveClassStuEvaluation(@Body RequestBody requestBody);
    //线上培训详情
    @GET(RetrofitService.BASE_URL_DIR + "train/off/class/stuRelatedNoteList")
    Observable<CommonResponse<List<NoteBean.RecordsEntity>>> stuRelatedNoteList(@Query("classId") int classId
            , @Query("offlinePlanId") int offlinePlanId);
    //获取学员证信息
    @GET(RetrofitService.BASE_URL_DIR + "train/classUser/getClassStudentCartInfo")
    Observable<CommonResponse<CartInfoBean>> getClassStudentCartInfo(@Query("classId") int classId, @Query("userId") int userId);
   //更新学员证头像
    @FormUrlEncoded
    @POST(RetrofitService.BASE_URL_DIR + "user/archives/UpdateOneInchPhoto")
    Observable<CommonResponse<String>> UpdateOneInchPhoto(@Field("userId") int userId
            ,@Field("oneInchPhoto") String oneInchPhoto);
    //学生端电子讲义
    @GET(RetrofitService.BASE_URL_DIR + "train/off/class/notes/stuClassLectureNotesPage")
    Observable<CommonResponse<NoteBean>> notes(@Query("classId") int classId
            , @Query("pageNo") int pageNum, @Query("pageSize") int pageSize);
    //学生端面授课程-授课计划分页查询
    @GET(RetrofitService.BASE_URL_DIR + "train/class/plan/stuOfflineClassPlanPage")
    Observable<CommonResponse<OfflinePlanBean>> stuOfflineClassPlanPage(@Query("classId") int classId
            , @Query("pageNo") int pageNum, @Query("pageSize") int pageSize);
    //讲师详情
    @GET(RetrofitService.BASE_URL_DIR + "resource/teacher/getTeacherInfo")
    Observable<CommonResponse<TeacherInfoBean>> getTeacherInfo(@Query("teacherId") int teacherId);

    //我的考试
    @GET(RetrofitService.BASE_URL_DIR + "ques/exam/user/info")
    Observable<CommonResponse<ExamInfoBean>> examinfo(@Query("examId") int examId );

    //查询用户学习数据统计
    @GET(RetrofitService.BASE_URL_DIR + "user/security/study/data")
    Observable<CommonResponse<StudyDataBean>> getStudyData(@Query("token") String token );

    // 每日练习配置数据
    //@FormUrlEncoded
    @POST(RetrofitService.BASE_URL_DIR + "learn/studentPractice/studentDailyPracticeConfig")
    Observable<CommonResponse<ExercisesDaily>> getStudentDailyPracticeConfig();

    // 专项练习列表数据
    //@FormUrlEncoded
    @POST(RetrofitService.BASE_URL_DIR + "learn/studentPractice/studentSpecialPracticeConfig")
    Observable<CommonResponse<ArrayList<ExercisesSpecial>>> getSpecialPracticeList();

    // 专项练习重新练习
    @FormUrlEncoded
    @POST(RetrofitService.BASE_URL_DIR + "learn/studentPractice/studentSpecialPracticeRestart")
    Observable<CommonResponse<Object>> studentSpecialPracticeRestart(@Field("libId") int libId);

    // 每周练习列表数据
    @GET(RetrofitService.BASE_URL_DIR + "ques/practiceActivities/getWeeklyPracticeList")
    Observable<CommonResponse<ArrayList<ExercisesWeekly>>> getWeeklyPracticeList(@Query("isDefault") int isDefault,// 0默认前三个月、1传年月得当月的
                                                                                 @Query("year") int year,
                                                                                 @Query("month") int month);

    // 每周练习列表筛选条件最小年月
    @GET(RetrofitService.BASE_URL_DIR + "ques/practiceActivities/getWeeklyPracticeMinTime")
    Observable<CommonResponse<ExercisesWeekly>> getWeeklyPracticeMinTime();


    // APP升級
    @POST(RetrofitService.BASE_URL_DIR + "config/config/updateVersionInfo")
    Observable<CommonResponse<Upgrade>>getUpgrade(@Body RequestBody requestBody);

    //学生端微视频分类列表获取
    @GET(RetrofitService.BASE_URL_DIR + "news/microVideoCategory/getListByStudent")
    Observable<JsonRootMicroVideoBean> getListOfMicroVideoCategories();
    // 学生获取微视频列表
    @POST(RetrofitService.BASE_URL_DIR + "news/microVideo/getListByStudent")
    Observable<CommonResponse<CommonData<MicroVideoData.MicroVideoBean>>>getStudentsGetAListOfMicroVideos(@Body RequestBody requestBody);


    //（学员端）推荐新闻
    @GET(RetrofitService.BASE_URL_DIR + "news/news/merge/recommend/list")
    Observable<CommonResponse<List<RecommendedNewsBean>>> getRecommendedNews(@Query("pageSize") int pageSize);

    //(学员端)新闻列表（改版）
    @GET(RetrofitService.BASE_URL_DIR + "news/news/merge/learnList")
    Observable<PressSingleBean> getTheNewsListIsUpdated(@QueryMap Map<String, Object> param);

    // 更新微视频播放量
    @FormUrlEncoded
    @POST(RetrofitService.BASE_URL_DIR + "news/microVideo/updatePlayVolume")
    Observable<CommonResponse> getPlayTheRefresh(@Field("id") int id);

    //题库每日练习
    @FormUrlEncoded
    @POST(RetrofitService.BASE_URL_DIR + "ques/practiceActivities/getDailyPracticeQuestion")
    Observable<CommonResponse<List<DailyExaminationQuestionsBean>>> getDailyPractice(@Field("dailyQuestionCount") String dailyQuestionCount,
                                                                               @Field("libIds") String libIds);
    //题库每周练习
//    @FormUrlEncoded
    @GET(RetrofitService.BASE_URL_DIR + "ques/practiceActivities/getWeeklyPracticeQuestion")
    Observable<CommonResponse<List<DailyExaminationQuestionsBean>>> getEveryWeekTry(@Query("id") String id);

    //每日每周提交
    @POST(RetrofitService.BASE_URL_DIR + "learn/studentPractice/submitDailyPractice")
    Observable<CommonResponse<Object>> dailyAndWeeklySubmissions(@Body RequestBody requestBody);

    // 学生专项练习，根据题库id取出答题卡
    @FormUrlEncoded
    @POST(RetrofitService.BASE_URL_DIR + "ques/practiceActivities/getQuesIdSAnswerInfo")
    Observable<CommonResponse<SpecialBean>> getQidSpecial(@Field("id") int id);
    //题库我的培训
//    @FormUrlEncoded
    @GET(RetrofitService.BASE_URL_DIR + "ques/practice/getPracticeInfo")
    Observable<TestQuestions> getMyTraining(@Query("practiceId") String practiceId);

    //专项单题
//    @FormUrlEncoded
    @GET(RetrofitService.BASE_URL_DIR + "ques/question/info")
    Observable<CommonResponse<SpecialSingleTopicBean>>  getASingleItem(@Query("questionId") String questionId);

    //专项单题提交
    @POST(RetrofitService.BASE_URL_DIR + "learn/studentPractice/studentSpecialPracticeSubmitAnswer")
    Observable<CommonResponse<Object>> getSpecialSubmitted(@Body RequestBody requestBody);
    //获取考试基本信息
//    @FormUrlEncoded
    @GET(RetrofitService.BASE_URL_DIR + "ques/exam/user/info")
    Observable<CommonResponse<TestInformationBean>> getTestInformation(@Query("examId") String sourceId);
    //考试试题
    @Headers({"CONNECT_TIMEOUT:40000", "READ_TIMEOUT:40000", "WRITE_TIMEOUT:40000"})
    @GET(RetrofitService.BASE_URL_DIR + "ques/exam/user")
    Observable<CommonResponse<ExamQuestionsBean>> getForQuestions(@Query("examId") String sourceId);

    //考试交卷提交
    @Headers({"CONNECT_TIMEOUT:40000", "READ_TIMEOUT:40000", "WRITE_TIMEOUT:40000"})
    @POST(RetrofitService.BASE_URL_DIR + "ques/exam/user")
    Observable<CommonResponse<ResultsBean>> getSubmitTheTest(@Body RequestBody requestBody);
    //考试成绩基本信息
    @GET(RetrofitService.BASE_URL_DIR + "user/exam/history")
    Observable<CommonResponse<ResultsBean>> getPerformanceInformation(@Query("userExamResultId") String sourceId,  @Query("actionType") String actionType);

    //考试试题解析
//    @FormUrlEncoded
    @GET(RetrofitService.BASE_URL_DIR + "user/exam/question/analysis")
    Observable<CommonResponse<ExamQuestionsBean>> getTestQuestionParsing(@Query("examUserResultId") String sourceId,
                                                                         @Query("type") String type,
                                                                         @Query("limitCheck") String limitCheck,
                                                                         @Query("questionType") String questionType  );
    //考试成绩基本信息
    @GET(RetrofitService.BASE_URL_DIR + "user/exam/user/resultList")
    Observable<CommonResponse<HistoricalPerformanceBean>> getHistoricalPerformance(@Query("examId") String examId);
    //切换试题 H5与原生
    @GET(RetrofitService.BASE_URL_DIR + "config/switch/systemInfo")
    Observable<SwitchTheNative> getTryToSwitch(@Query("system") int system);

}
